/*
 * Copyright 2011 Google Inc. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.google.walkaround.wave.shared;

import com.google.walkaround.proto.Delta;
import com.google.walkaround.proto.DocumentDiffSnapshot;
import com.google.walkaround.proto.OperationBatch;
import com.google.walkaround.proto.ProtocolDocumentOperation;
import com.google.walkaround.proto.ProtocolDocumentOperation.Component;
import com.google.walkaround.proto.ProtocolDocumentOperation.Component.AnnotationBoundary;
import com.google.walkaround.proto.ProtocolDocumentOperation.Component.ElementStart;
import com.google.walkaround.proto.ProtocolDocumentOperation.Component.KeyValuePair;
import com.google.walkaround.proto.ProtocolDocumentOperation.Component.KeyValueUpdate;
import com.google.walkaround.proto.ProtocolDocumentOperation.Component.ReplaceAttributes;
import com.google.walkaround.proto.ProtocolDocumentOperation.Component.UpdateAttributes;
import com.google.walkaround.proto.ProtocolWaveletOperation;
import com.google.walkaround.proto.ProtocolWaveletOperation.MutateDocument;
import com.google.walkaround.proto.WalkaroundDocumentSnapshot;
import com.google.walkaround.proto.WalkaroundWaveletSnapshot;
import com.google.walkaround.proto.WaveletDiffSnapshot;

/**
 * A factory for creating message objects.
 *
 * @author zdwang@google.com (David Wang)
 */
public interface MessageFactory {
  OperationBatch createOperationBatch();
  ProtocolWaveletOperation createWaveOp();
  KeyValuePair createDocumentKeyValuePair();
  KeyValueUpdate createDocumentKeyValueUpdate();
  ElementStart createDocumentElementStart();
  ReplaceAttributes createDocumentReplaceAttributes();
  UpdateAttributes createDocumentUpdateAttributes();
  AnnotationBoundary createDocumentAnnotationBoundary();
  Component createDocumentOperationComponent();
  ProtocolDocumentOperation createDocumentOperation();
  MutateDocument createMutateDocument();
  WalkaroundDocumentSnapshot createDocumentSnapshot();
  WalkaroundWaveletSnapshot createWaveletSnapshot();
  WaveletDiffSnapshot createWaveletDiffSnapshot();
  DocumentDiffSnapshot createDocumentDiffSnapshot();
  Delta createDelta();
}
